package com.zhn;
/**
 * 给定一个 N 叉树，返回其节点值的层序遍历。（即从左到右，逐层遍历）。
 *
 * 树的序列化输入是用层序遍历，每组子节点都由 null 值分隔（参见示例）。
 *
 */

import org.w3c.dom.Node;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;


public class LevelOrderS {

    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>();
        Queue<Node> que = new LinkedList<>();
        if(root == null){
            return result;
        }
        que.add(root);
        while(!que.isEmpty()){
            List<Integer> line = new ArrayList<>();
            int len = que.size();
            while(len-- > 0){
                Node poll = que.poll();
                line.add(poll.val);
                List<Node> children = poll.children;
                for(Node node: children){
                    if(node != null){
                        que.add(node);
                    }
                }
            }
            result.add(line);
        }
        return result;
    }
    class Node {
        public int val;
        public List<Node> children;

        public Node() {}

        public Node(int _val) {
            val = _val;
        }

        public Node(int _val, List<Node> _children) {
            val = _val;
            children = _children;
        }
    }

}
